/*我的代码，只遍历了一次，不能保证交换完全了，如果要交换完全 需要循环很多次，时间复杂度就会很高

#include <bits/stdc++.h>
using namespace std;

//注意只能交换0，1或者1，2
string s;

void change(char &x, char &y)
{
	char t;
	t = x;
	x = y;
	y = t;
}

int main()
{
	cin >> s;
	int len = s.length();
	for (int i = 0; i < len - 1; i++)
	{
		if ((s[i] == '1' && s[i + 1] == '0') || (s[i] == '2' && s[i + 1] == '1'))
		{
			change(s[i], s[i + 1]);
		}
	}
	for (int i = 0; i < len; i++)
	{
		cout << s[i];
	}
	return 0;
}
*/
#include <bits/stdc++.h>
using namespace std;
// 注意只能交换0，1或者1，2
// 统计所有的1，在第一个2出现之前，把所有的1输出就行
string s;
int ans;
int main()
{
	bool flag = false; // 用来判断是否是第一个2
	cin >> s;
	for (int i = 0; i < s.length(); i++) // 统计1的个数
	{
		if (s[i] == '1' )
        {
			ans++;
        }
	}
	for (int i = 0; i < s.length(); i++)
	{
		if (s[i] == '0')//如果是0，直接输出
        {
			cout << 0;
			continue;
        }
        if(s[i]=='1')//如果是1进入下一个循环
        {
			continue;
        }
        if(s[i]=='2')
        {
			if (flag == false)
			{
				for (int j = 1; j <= ans; j++) // 把所有的1输出
				{
					cout << 1;
				}
				flag = true;
			}
			cout << 2; // 然后再输出2
        }
	}
	if (flag == false)
	{
		for (int i = 1; i <= ans; i++)
			cout << 1;
	}

	return 0;
}
